"""
@Project: pythonPro1
@Name: _0max_distract.py
@Author: linxin_liu
@Date: 2022/10/13 20:38
1.读入一张黑白图片，取出图中像素值最大（小）的点及其坐标，并将图片按“田”分为四张图片并保存。
"""
import cv2

# img = cv2.imread('D:/tools/image_operation/cat.png')
import numpy as np


def cv_show(windows_name, image, time):
    cv2.imshow(windows_name, image)  # 创建一个窗口，命名image，并展示窗口
    cv2.waitKey(time)  # 窗口显示时间，参数为0表示按任意键销毁
    cv2.destroyAllWindows()  # 销毁所有窗口


# cv_show('a', img, 3000)
# 读入一张黑白照片。
img = cv2.imread('D:/tools/image_operation/home.png', cv2.IMREAD_GRAYSCALE)  # cv2.IMREAD_GRAYSCALE
# img1 = cv2.resize(img, (50, 50))  # 修改图像大小，会切割
# cv_show('1', img, 5000)
# print(img.shape)
# cv2.imwrite('D:/tools/image_operation/mirror3.png', img) 将图像存储在本地。
print(img)
print(type(img))
print('第一个像素的灰度值:', img[0:1, 0:1])
print('类型1：', type(img[0:1, 0:1]))
print('第一个像素的灰度值:', img[0][0])
print('类型2：', type(img[0][0]))
print('行数:', len(img))
print('列数:', len(img[1]))
temp = img[0:1, 0:1]
for i in range(0, len(img)):  # 获得第一个灰度值最大的像素。
    for j in range(0, len(img[0])):
        if temp < img[i:i + 1, j:j + 1]:
            temp = img[i:i + 1, j:j + 1]
            x, y = i, j
print('第一个最大的像素的灰度值是：', temp)
print('这个像素的坐标是：{}，{}'.format(x, y))
print('hello')

# 如果照片大小不是偶数，让第一张照片大一些。图片x轴为竖直的。
if len(img[0]) % 2 == 0:
    w1 = len(img[0]) // 2  # 第一行照片列数(长度),y,w
else:
    w1 = len(img[0]) // 2 + 1
print('列数:', w1)
w2 = len(img[0]) - w1  # 第一行照片列数
print('列数:', w2)

if len(img) % 2 == 0:
    h1 = len(img) // 2  # 第一行照片行数(高度),x,h
else:
    h1 = len(img) // 2 + 1
print('行数:', h1)
h2 = len(img) - h1  # 第二行照片行数
print('行数:', h2)


# 将一维数组调形为二维数组
# df1 = np.arange(0, x1*y1)  # 一维，有x1*y1个元素。
# df2 = df1.reshape((x1, y1))
# print('初始化的照片1：')  # 8行7列
# print(df2)
# print(type(df2))
# for i in range(0, y1):  # 行
#     for j in range(0, x1):  # 列
#         df2[j][i] = img[j][i]


def get_sub_graph(h, w, original, num):
    # 给一个宽和长，和一张原始图片，返回一个小图片。
    df1 = np.arange(0, h * w)  # 一维，有w*h个元素。
    df2 = df1.reshape((h, w))  # 一维转二维。
    original_h = len(original)  # 原始的高
    original_w = len(original[0])  # 原始的长
    for a in range(0, h):  # 行
        for b in range(0, w):  # 列
            if num == 1:
                temp_a = a
                temp_b = b
                df2[a][b] = original[temp_a][temp_b]
            elif num == 2:
                temp_a = a
                temp_b = original_w - w + b
                df2[a][b] = original[temp_a][temp_b]
            elif num == 3:
                temp_a = original_h - h + a
                temp_b = b
                df2[a][b] = original[temp_a][temp_b]
            else:
                temp_a = original_h - h + a
                temp_b = original_w - w + b
                df2[a][b] = original[temp_a][temp_b]

    return df2


graph1 = get_sub_graph(h1, w1, img, 1)  # 第几个图片
graph2 = get_sub_graph(h1, w2, img, 2)
graph3 = get_sub_graph(h2, w1, img, 3)
graph4 = get_sub_graph(h2, w2, img, 4)
print('真的照片1：')
print(graph1)
print('真的照片1类型:', type(graph1))
print('真的照片2：')
print(graph2)
print('真的照片2类型:', type(graph2))
print('真的照片3：')
print(graph3)
print('真的照片3类型:', type(graph3))
print('真的照片4：')
print(graph4)
print('真的照片4类型:', type(graph4))
cv2.imwrite('D:/tools/image_operation/home1.png', graph1)  # 将图像存储在本地。
cv2.imwrite('D:/tools/image_operation/home2.png', graph2)  # 将图像存储在本地。
cv2.imwrite('D:/tools/image_operation/home3.png', graph3)  # 将图像存储在本地。
cv2.imwrite('D:/tools/image_operation/home4.png', graph4)  # 将图像存储在本地。

# 创建ndarray
# graph0 = np.array([
#     [0, 0],
#     [0, 0]
# ])
# 默认的数据基本都是浮点型
# graph1 = np.array(list/tuple, dtype = np.float32) 指定数据类型
# print('照片类型：', type(graph0))
